/**
 * 公共工具函数
 */

/**
 * 格式化时间
 * @param {Date} date 日期对象
 * @param {String} format 格式化模板
 * @returns {String} 格式化后的时间字符串
 */
function formatTime(date, format = 'YYYY-MM-DD HH:mm:ss') {
  const year = date.getFullYear();
  const month = date.getMonth() + 1;
  const day = date.getDate();
  const hour = date.getHours();
  const minute = date.getMinutes();
  const second = date.getSeconds();

  format = format.replace(/YYYY/g, year);
  format = format.replace(/MM/g, padZero(month));
  format = format.replace(/DD/g, padZero(day));
  format = format.replace(/HH/g, padZero(hour));
  format = format.replace(/mm/g, padZero(minute));
  format = format.replace(/ss/g, padZero(second));

  return format;
}

/**
 * 补零
 * @param {Number} n 数字
 * @returns {String} 补零后的字符串
 */
function padZero(n) {
  return n < 10 ? '0' + n : n.toString();
}

/**
 * 检查是否登录
 * @returns {Boolean} 是否已登录
 */
function checkLogin() {
  const token = wx.getStorageSync('token');
  return !!token;
}

/**
 * 显示提示信息
 * @param {String} message 提示信息
 * @param {String} icon 图标类型，success、error、loading、none
 * @param {Number} duration 显示时长，单位毫秒
 */
function showToast(message, icon = 'none', duration = 1500) {
  wx.showToast({
    title: message,
    icon: icon,
    duration: duration
  });
}

/**
 * 显示加载提示
 * @param {String} message 提示信息
 * @param {Boolean} mask 是否显示透明蒙层
 */
function showLoading(message = '加载中...', mask = true) {
  wx.showLoading({
    title: message,
    mask: mask
  });
}

/**
 * 隐藏加载提示
 */
function hideLoading() {
  wx.hideLoading();
}

/**
 * 显示模态对话框
 * @param {String} title 标题
 * @param {String} content 内容
 * @param {Boolean} showCancel 是否显示取消按钮
 * @returns {Promise} 成功返回true，失败返回false
 */
function showModal(title, content, showCancel = true) {
  return new Promise((resolve, reject) => {
    wx.showModal({
      title: title,
      content: content,
      showCancel: showCancel,
      success: (res) => {
        if (res.confirm) {
          resolve(true);
        } else if (res.cancel) {
          resolve(false);
        }
      },
      fail: () => {
        reject(false);
      }
    });
  });
}

/**
 * 获取页面栈信息
 * @returns {Array} 页面栈数组
 */
function getPages() {
  return getCurrentPages();
}

/**
 * 获取当前页面
 * @returns {Object} 当前页面对象
 */
function getCurrentPage() {
  const pages = getCurrentPages();
  return pages[pages.length - 1];
}

/**
 * 获取上一个页面
 * @returns {Object} 上一个页面对象
 */
function getPrevPage() {
  const pages = getCurrentPages();
  if (pages.length > 1) {
    return pages[pages.length - 2];
  }
  return null;
}

module.exports = {
  formatTime,
  checkLogin,
  showToast,
  showLoading,
  hideLoading,
  showModal,
  getPages,
  getCurrentPage,
  getPrevPage
}; 